package com.hxh.entity;

import com.alibaba.fastjson.JSONArray;
import lombok.Data;
import org.apache.commons.lang3.StringUtils;

import java.io.Serializable;
import java.util.List;


/**
 * 模板配置管理
 **/
@Data
public class TemplateConfig implements Serializable{
    private static final long serialVersionUID = 1L;

    /**
     * 自增id
     * 索引:PRI
     **/
    private Integer id;

    /**
     * 模板名称
     **/
    private String templateName;

    /**
     * 作者
     **/
    private String author;

    /**
     * 描述
     **/
    private String desc;

    /**
     * 使用指引
     **/
    private String guide;

    /**
     * 继承GenTableCRUD的类
     **/
    private String genCrud;

    /**
     * 继承InitBaseProject的类
     **/
    private String initBaseProject;

    /**
     * 继承GenVueBase的类
     **/
    private String genVue;

    /**
     * 继承InitVueProject的类
     **/
    private String initVueProject;

    /**
     * 自定义表转代码类
     * json数组形式保存，每个json对象格式如下:
     * {methodClass:调用类,methodName:调用方法名, showBtn：前端按钮名称, desc:介绍}
     * 类名和方法名字没有限制，但是方法入参固定为Project和ClassInfo两个对象
     **/
    private String additionTableMethod;

    /**
     * 初始化菜单类
     **/
    private String initTableMenu;

    /**
     * 根据表生成所有crud代码的类
     **/
    private String crudTool;

    /**
     * 额外可选组件
     **/
    private String additionComponent;

    /**
     * 调用方式 0本地模板 1网络模板
     **/
    private String type;

    /**
     * 网络调用地址
     **/
    private String networkUrl;

    /**
     * 是否支持多数据源 0否1是
     */
    private String supportMutilDatasource;

    private List<AdditionComponent> addition;
    private List<additionTableMethodComponent> additionTableMethodComponentList;

    public void setAdditionComponent(String additionComponent) {
        this.additionComponent = additionComponent;
        if (StringUtils.isNotBlank(additionComponent)) {
            JSONArray jsonArray = JSONArray.parseArray(additionComponent);
            this.addition = jsonArray.toJavaList(AdditionComponent.class);
        }
    }

    public void setAdditionTableMethod(String additionTableMethod) {
        this.additionTableMethod = additionTableMethod;
        if (StringUtils.isNotBlank(additionTableMethod)) {
            JSONArray jsonArray = JSONArray.parseArray(additionTableMethod);
            this.additionTableMethodComponentList = jsonArray.toJavaList(additionTableMethodComponent.class);
        }
    }

    @Data
    static class additionTableMethodComponent {
        //调用类
        private String methodClass;
        //调用方法名
        private String methodName;
        //前端按钮名称
        private String btnName;
        //介绍
        private String desc;
    }


    @Data
    static class AdditionComponent {
        /**
         * 组件名称
         */
        private String name;
        /**
         * 组件介绍
         */
        private String desc;
    }

}
